/**@description 产品分类关联控制器 */
const dayjs = require("dayjs");
const correlation_category_product_Model = require("../../model/relation/correlation_catetory_product");
const { generateSixDigitID } = require("../../utils/crypto");

/**@description 添加分类和产品之间的关联 */
// const saveCateForProduct = async ({ productIds = [], categoryId }) => {
//     try {
//         const params = {
//             id: generateSixDigitID(),
//             createDate: dayjs(),
//             productId: productId,
//             categoryId: categoryId
//         };
//         const res = await correlation_category_product_Model.findOne({ productId, categoryId });
//         if (res == null) {
//             //没有则插入一条数据
//             result = await correlation_category_product_Model.create({ ...params });
//         } else {
//             //有则删除这条数据
//             const ids = [res.id];
//             const deleteParams = {
//                 productId: productId && { $in: [productId] },
//                 categoryId: categoryId && { $in: [categoryId] }
//             }
//             result = await correlation_category_product_Model.deleteMany(deleteParams)
//         }
//         return {
//             code: 0,
//             message: "操作成功"
//         }
//     } catch (error) {
//         return {
//             code: 12,
//             message: "服务器出错了"
//         }
//     }
// }

/**@description 分类批量添加产品 暂仅支持一个商品1个分类，一个分类下有可以有多个商品 */
const setCateAddProductController = async ({ categoryId, productIds = [] }) => {
    try {

        //传进来的cateId是否已经有在里面了
        const findRes = await correlation_category_product_Model.find({ categoryId })

        let insertProdIds = [...productIds];
        if (findRes.length > 0) {
            findRes.forEach(item => {
                if (productIds.includes(item.productId)) {
                    insertProdIds = insertProdIds.filter(id => id !== item.productId)
                }
            })
        }


        const document = insertProdIds.map(item => ({
            categoryId,
            productId: item
        }))
        const res = await correlation_category_product_Model.insertMany(document, { new: true });
        // console.log("创建成功", res);
        return {
            code: 0,
            message: "分类设置成功"
        }
    } catch (error) {
        // console.log("创建失败", error);
        return {
            code: 2500,
            message: "操作失败，请联系管理员"
        }
    }
}

/**@description 取消分类关系 */
const setCanelCateRelationProdController = async ({ categoryId, productIds = [] }) => {
    try {

        const res = await correlation_category_product_Model.deleteMany({
            categoryId: { $eq: categoryId },
            productId: { $in: productIds },

        }, { new: true });
        console.log("删除成功", res);
        return {
            code: 0,
            message: "产品分类关联取消成功"
        }
    } catch (error) {
        return {
            code: 2500,
            message: "操作失败，请联系管理员"
        }
    }
}

/**@description 根据分类id或者商品id来删除数据 */
const delete_relation_productAndCate = async ({ categoryIds, productIds }) => {
    try {
        console.log("待删除数据：\n", categoryIds)
        const deleteResult = await correlation_category_product_Model.deleteMany({
            categoryId: { $in: categoryIds },
            productId: { $in: productIds },
        });
        console.log("关联表删除结果：", deleteResult);
        return {
            code: 0,
            message: "产品分类关联取消成功"
        }
    } catch (error) {
        // console.log("报错", error);
        return {
            code: 2500,
            message: "操作失败，请联系管理员"
        }
    }
}

// delete_relation_productAndCate({
//     categoryIds: ["分类id1-2"],
//     productIds:["prod-4",]
// })

module.exports = {
    setCateAddProductController,
    setCanelCateRelationProdController,
    delete_relation_productAndCate
}